<!--
 * @LastEditors: 七七
 * @Date: 2023-01-10 21:21:56
-->
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>变量的提升</title>
</head>

<body>
  <script>
    /*
   * 变量的声明提前
   * 	- 使用var关键字声明的变量，会在所有的代码执行之前被声明（但是不会赋值），
   * 	-	但是如果声明变量时不使用var关键字，则变量不会被声明提前
   *
   * 函数的声明提前
   * 	- 使用函数声明形式创建的函数 function 函数(){}
   * 		它会在所有的代码执行之前就被创建，所以我们可以在函数声明前来调用函数
   * 	- 使用函数表达式创建的函数，不会被声明提前，所以不能在声明前调用
   */

    // console.log(a); //undefined
    // var a = 123;

    // console.log(a); //a is not defined
    // a = 123;

    // console.log(a); // can't access lexical declaration 'a' before initialization
    // let a = 123;

    fun(); //我是一个fun函数
    //函数声明，会被提前创建
    function fun() {
      console.log("我是一个fun函数");
    }

    fun2(); //fun2 is not a function
    //函数表达式，不会被提前创建
    var fun2 = function () {
      console.log("我是fun2函数");
    };



  </script>
</body>

</html>